package fr.afcepf.atod18.service;

import java.util.GregorianCalendar;

import javax.jws.WebMethod;
import javax.jws.WebService;

import org.springframework.transaction.annotation.Transactional;

import fr.afcepf.atod18.dao.DaoCommande;
import fr.afcepf.atod18.dao.DaoEtatCommande;
import fr.afcepf.atod18.entity.Commande;
import fr.afcepf.atod18.entity.EtatCommande;
import fr.afcepf.atod18.entity.HistoriqueCommande;

@WebService(endpointInterface="fr.afcepf.atod18.service.IServiceCommande")
@Transactional
public class ServiceCommande implements IServiceCommande {
    DaoCommande daoCommande;
    DaoEtatCommande daoEtatCommande;
    @Override
    @WebMethod
    public void preparerCommande(int paramId, int idEtatCommande) {
        System.out.println("Commande en preparation ---" + daoCommande + " " + daoEtatCommande);
        majEtatCommande(paramId, idEtatCommande);
    }
    @Override
    @WebMethod
    public void demanderLivraison(int paramId, int idEtatCommande) {
        System.out.println("Commande en livraison ---" + daoCommande);
        majEtatCommande(paramId, idEtatCommande);
    }
    @Override
    @WebMethod
    public void finLivraison(int paramId, int idEtatCommande) {
        System.out.println("livraison terminee ---" + daoCommande);
        majEtatCommande(paramId, idEtatCommande);
    }
    @Override
    @WebMethod
    public void annulerCommande(int paramId, int idEtatCommande) {
        System.out.println("Commande annulee ---" + daoCommande);
        majEtatCommande(paramId, idEtatCommande);
    }
    private void majEtatCommande(int paramId, int idEtatCommande) {
        Commande commande = daoCommande.find(paramId);
        EtatCommande etatCommande = daoEtatCommande.find(idEtatCommande);
        commande.setEtatCommande(etatCommande);        
        HistoriqueCommande historiqueCommande = new HistoriqueCommande(etatCommande, new GregorianCalendar());
        commande.getHistoriqueCommandes().add(historiqueCommande);
        System.out.println("id=" + paramId + " total=" + commande.getTotalCommande());
    }
    /**
     * @return the daoCommande
     */
    public DaoCommande getDaoCommande() {
        return daoCommande;
    }
    /**
     * @param paramDaoCommande the daoCommande to set
     */
    public void setDaoCommande(DaoCommande paramDaoCommande) {
        daoCommande = paramDaoCommande;
    }
    /**
     * @return the daoEtatCommande
     */
    public DaoEtatCommande getDaoEtatCommande() {
        return daoEtatCommande;
    }
    /**
     * @param paramDaoEtatCommande the daoEtatCommande to set
     */
    public void setDaoEtatCommande(DaoEtatCommande paramDaoEtatCommande) {
        daoEtatCommande = paramDaoEtatCommande;
    }
}
